﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Windows.Forms;

using ServiceDeskUNAB.Modelo;

namespace ServiceDeskUNAB.Controlador
{
    class Conexion
    {
        private static Conexion instance;
        private SqlConnection con;
        string sesionUsername;

        public string SesionUsername
        {
            get { return sesionUsername; }
            set { sesionUsername = value; }
        }
        int sesionID;

        public int SesionID
        {
            get { return sesionID; }
            set { sesionID = value; }
        }


        public SqlConnection Con
        {
            get
            {
                con = new SqlConnection(connectionString);
                con.Open();
                return con;
            }
            set { con = value; }
        }
        public static string connectionString = "Data Source=(LocalDB)\\v11.0;AttachDbFileName=|DataDirectory|\\ServiceDesk.mdf;Connect Timeout=30";

        private Conexion()
        {
            con = new SqlConnection(connectionString);
        }

        public static Conexion Instance
        {
            get
            {
                if (instance == null)
                {
                    instance = new Conexion();
                }
                else
                    instance.con = new SqlConnection(connectionString);
                return instance;
            }
        }

        public ComboBox.ObjectCollection ObtenerCampos(string tabla)
        {
            ComboBox.ObjectCollection lista = new ComboBox.ObjectCollection(new ComboBox());

            //SqlConnection con = new SqlConnection(connectionString);
            SqlCommand com = new SqlCommand();

            string str = "select * from " +tabla;
            com.CommandText = str;
            com.Connection = Conexion.Instance.Con;
            SqlDataReader reader = com.ExecuteReader();
            while (reader.Read())
            {
                string nombre;
                if(tabla=="USUARIO")
                    nombre = "NOMBRES_" + tabla;
                else
                    nombre = "NOMBRE_" + tabla;
                /*object[] ob=new object[2];
                ob[0]=((string)reader[nombre]).Trim();
                ob[1]=((int)reader["ID_"+tabla]);*/
                CampoIncidencia ci = new CampoIncidencia();
                ci.Nombre=((string)reader[nombre]).Trim();
                ci.Id=((int)reader["ID_"+tabla]);

                lista.Add(ci);
               
            }

            reader.Close();
            Conexion.Instance.Con.Close();
            return lista;
        }
        public bool Ingresar(string tabla, string valor)
        {
            try
            {
                SqlCommand com = new SqlCommand();


                com.CommandText = "INSERT INTO "+ tabla
                    + " VALUES" +
                    "(@Nombre)";

                //com.Parameters.AddWithValue("@ID_CategoriaIncidencia", ID_CategoriaIncidencia);
                com.Parameters.AddWithValue("@Nombre", valor);


                com.Connection = Conexion.Instance.Con;
                SqlDataReader ejecutar = com.ExecuteReader();
                Conexion.Instance.Con.Close();
                return true;
            }
            catch (Exception e)
            {
                Conexion.Instance.Con.Close();
                Console.WriteLine(e.Message);
                return false;
                throw;
            }
        }

        public bool Modificar(string tabla, string valor,int id)
        {
            try
            {
                SqlCommand com = new SqlCommand();


                com.CommandText = "UPDATE "+ tabla +
                    " SET NOMBRE_" + tabla + "=@Nombre " +
                    "WHERE ID_"+tabla +"= @id";

                //com.Parameters.AddWithValue("@ID_CategoriaIncidencia", ID_CategoriaIncidencia);
                com.Parameters.AddWithValue("@id", id);
                com.Parameters.AddWithValue("@Nombre", valor);

                com.Connection = Conexion.Instance.Con;
                SqlDataReader ejecutar = com.ExecuteReader();
                Conexion.Instance.Con.Close();
                return true;
            }
            catch (Exception e)
            {
                Conexion.Instance.Con.Close();
                Console.WriteLine(e.Message);
                return false;
                throw;
            }
        }

        public CampoIncidencia Buscar(string tabla, int id)
        {
            CampoIncidencia resultado=null;
            SqlCommand com = new SqlCommand();
            string str = "select * from " + tabla+" where ID_"+tabla+"=@id";
            com.CommandText = str;
            com.Parameters.AddWithValue("@id", id);
            com.Connection = Conexion.Instance.Con;
            SqlDataReader reader = com.ExecuteReader();
            while (reader.Read())
            {
                resultado = new CampoIncidencia();
                string nombre;
                if (tabla == "USUARIO")
                    nombre = "NOMBRES_" + tabla;
                else
                    nombre = "NOMBRE_" + tabla;
                /*object[] ob=new object[2];
                ob[0]=((string)reader[nombre]).Trim();
                ob[1]=((int)reader["ID_"+tabla]);*/
                //CampoIncidencia ci = new CampoIncidencia();
                resultado.Nombre = ((string)reader[nombre]).Trim();
                resultado.Id = ((int)reader["ID_" + tabla]);

                //lista.Add(ci);

            }

            return resultado;
        }
    }
}
